﻿//#define _CRT_SECURE_NO_WARNINGS  1
////一定要动手，例子不管多么简单，建议至少自己手敲一遍看看是否理解了里头的细枝末节。
////一定要学会思考，思考为什么要这样，而不是那样。还要举一反三地思考
//#include<iostream>
//using namespace std;
//class person {
//public:
//	int _age;
//	string _name;
//public:
//	person(int age, string name)
//	{
//		this->_age = age;
//		this->_name = name;
//	}
//};
////普通模板
//template <class T>//声明一个模版，告诉编译器后面紧跟的不要报错，T是一个通用数据类型
//bool mycompare(T& x, T& y)
//{
//	if (x == y)
//	{
//		return true;
//	}
//	else
//	{
//		return false;
//	}
//}
////具体化，显示具体化的原型和定意思以template<>开头，并通过名称来指出类型
////具体化优先于常规模板
//template<> bool mycompare(person& x, person& y)
//{
//	if (x._age == y._age && x._name == y._name)
//	{
//		return true;
//	}
//	else
//	{
//		return false;
//	}
//}
//void test01()
//{
//	int a = 10;
//	int b = 100;
//	//内置类型可以直接使用通用的函数模板
//	bool n = mycompare(a, b);
//	if (n = true)
//	{
//		cout << "a = b" << endl;
//	}
//	else
//	{
//		cout << "a!=b" << endl;
//	}	
//}
//void test02()
//{
//	person p1(18, "Tom");
//	person p2(18, "Tom");
//	//自定义数据类型，不会调用普通的函数模板
//	//可以创建具体化的Person数据类型的模板，用于特殊处理这个类型
//	bool n = mycompare(p1, p2);
//	if (n = true)
//	{
//		cout << "a = b" << endl;
//	}
//	else
//	{
//		cout << "a!=b" << endl;
//	}
//
//}
//int main()
//{
//	test01();
//	system("pause");
//	return 0;
//}